/**
 * Alert 组件的主题配置
 * 
 * 基于企业级设计规范 (Alert.json) 的完整配置
 * 包含所有警告提示样式定义
 */

import type { ComponentToken } from 'antd/es/alert/style';

// ========== 设计 Token 常量 ==========

/**
 * 间距相关 Token
 */
const SPACING_TOKENS = {
  // 默认内边距
  defaultPadding: {
    paddingBlock: 4,
    paddingInline: 12,
  },
  
  // 带描述时的内边距
  withDescriptionPadding: {
    paddingBlock: 12,
    paddingInline: 16,
  },
} as const;

/**
 * 图标相关 Token
 */
const ICON_TOKENS = {
  // 带描述时的图标尺寸
  withDescriptionIconSize: 24,
} as const;

/**
 * Alert 完整主题配置
 * 
 * 根据设计规范文件 Alert.json 定义的企业级警告提示样式
 * 涵盖所有警告提示类型和状态的完整配置
 * 
 * @example
 * ```tsx
 * <ConfigProvider theme={{ components: { Alert: alertThemeConfig } }}>
 *   <Alert message="成功提示" type="success" />
 *   <Alert message="信息提示" type="info" />
 *   <Alert message="警告提示" type="warning" />
 *   <Alert message="错误提示" type="error" />
 * </ConfigProvider>
 * ```
 */
export const alertThemeConfig: Partial<ComponentToken> = {
  // ========== 默认内边距配置 ==========
  defaultPadding: `${SPACING_TOKENS.defaultPadding.paddingBlock}px ${SPACING_TOKENS.defaultPadding.paddingInline}px`,
  
  // ========== 带描述时的配置 ==========
  withDescriptionPadding: `${SPACING_TOKENS.withDescriptionPadding.paddingBlock}px ${SPACING_TOKENS.withDescriptionPadding.paddingInline}px`,
  withDescriptionIconSize: ICON_TOKENS.withDescriptionIconSize,
};

/**
 * 获取 Alert 主题配置
 * 
 * 支持部分覆盖默认配置，可以基于完整的设计规范进行定制
 * 
 * @param customConfig 自定义配置（可选）
 * @returns 合并后的主题配置
 * 
 * @example
 * ```tsx
 * // 基于设计规范的定制
 * const myAlertTheme = getAlertTheme({
 *   withDescriptionIconSize: 28,  // 自定义带描述时的图标尺寸
 * });
 * 
 * <ConfigProvider theme={{ components: { Alert: myAlertTheme } }}>
 *   <Alert message="提示" description="详细描述内容" type="info" />
 * </ConfigProvider>
 * ```
 */
export const getAlertTheme = (
  customConfig?: Partial<ComponentToken>
): Partial<ComponentToken> => {
  return {
    ...alertThemeConfig,
    ...customConfig,
  };
};

/**
 * 导出 Alert 组件的 Token 类型
 * 方便 TypeScript 类型检查和开发时的智能提示
 */
export type { ComponentToken as AlertComponentToken } from 'antd/es/alert/style';

